import request from '@/utils/request';
import { type Menu, type MenuTreeNode } from '@/types/system/menu';

/**
 * 获取菜单列表
 * @param params 查询参数
 * @returns 菜单列表
 */
export function getMenuList(params?: any) {
  return request<Menu[]>({
    url: '/menus',
    method: 'get',
    params
  });
}

/**
 * 获取菜单树
 * @param params 查询参数
 * @returns 菜单树
 */
export function getMenuTree(params?: any) {
  return request<MenuTreeNode[]>({
    url: '/menus/tree',
    method: 'get',
    params
  });
}

/**
 * 获取菜单详情
 * @param id 菜单ID
 * @returns 菜单详情
 */
export function getMenuDetail(id: number) {
  return request<Menu>({
    url: `/menus/${id}`,
    method: 'get'
  });
}

/**
 * 创建菜单
 * @param data 菜单数据
 * @returns 菜单ID
 */
export function createMenu(data: Menu) {
  return request<number>({
    url: '/menus',
    method: 'post',
    data
  });
}

/**
 * 更新菜单
 * @param data 菜单数据
 * @returns 是否成功
 */
export function updateMenu(data: Menu) {
  return request<boolean>({
    url: '/menus',
    method: 'put',
    data
  });
}

/**
 * 删除菜单
 * @param id 菜单ID
 * @returns 是否成功
 */
export function deleteMenu(id: number) {
  return request<boolean>({
    url: `/menus/${id}`,
    method: 'delete'
  });
}

/**
 * 根据角色ID获取菜单树
 * @param roleId 角色ID
 * @returns 菜单树
 */
export function getMenuTreeByRoleId(roleId: number) {
  return request<MenuTreeNode[]>({
    url: `/roles/${roleId}/menus/tree`,
    method: 'get'
  });
}

/**
 * 根据角色ID获取菜单ID列表
 * @param roleId 角色ID
 * @returns 菜单ID列表
 */
export function getMenuIdsByRoleId(roleId: number) {
  return request<number[]>({
    url: `/roles/${roleId}/menus/ids`,
    method: 'get'
  });
}

/**
 * 分配角色菜单
 * @param roleId 角色ID
 * @param menuIds 菜单ID列表
 * @returns 是否成功
 */
export function assignRoleMenus(roleId: number, menuIds: number[]) {
  return request<boolean>({
    url: `/roles/${roleId}/menus`,
    method: 'post',
    data: menuIds
  });
}

/**
 * 获取当前用户菜单
 * @returns 菜单树
 */
export function getUserMenus() {
  return request<Menu[]>({
    url: '/user/menus',
    method: 'get'
  });
}
